function getCookie(name) {
    var cookieValue = null;
  
    if (document.cookie && document.cookie != '') {
      var cookies = document.cookie.split(';');
  
      for (var i = 0; i < cookies.length; i++) {
        var cookie = jQuery.trim(cookies[i]);
  
        // Does this cookie string begin with the name we want?
        if (cookie.substring(0, name.length + 1) == (name + '=')) {
          cookieValue = decodeURIComponent(cookie.substring(name.length + 1));
          break;
        }
      }
    }
  
    return cookieValue;
  }
  
  function csrfSafeMethod(method) {
    // these HTTP methods do not require CSRF protection
    return (/^(GET|HEAD|OPTIONS|TRACE)$/.test(method));
  }
  
  function sameOrigin(url) {
    // test that a given url is a same-origin URL
    // url could be relative or scheme relative or absolute
    var host = document.location.host; // host + port
    var protocol = document.location.protocol;
    var sr_origin = '//' + host;
    var origin = protocol + sr_origin;
  
    // Allow absolute or scheme relative URLs to same origin
    return (url == origin || url.slice(0, origin.length + 1) == origin + '/') ||
      (url == sr_origin || url.slice(0, sr_origin.length + 1) == sr_origin + '/') ||
      // or any other URL that isn't scheme relative or absolute i.e relative.
      !(/^(\/\/|http:|https:).*/.test(url));
  }
  
  var csrftoken = window.drf.csrfToken;
  
  $.ajaxSetup({
    beforeSend: function(xhr, settings) {
      if (!csrfSafeMethod(settings.type) && sameOrigin(settings.url)) {
        // Send the token to same-origin, relative URLs only.
        // Send the token only if the method warrants CSRF protection
        // Using the CSRFToken value acquired earlier
        xhr.setRequestHeader(window.drf.csrfHeaderName, csrftoken);
      }
    }
  });
   +47 static/rest_framework/js/default.js 0 → 100644 
  $(document).ready(function() {
    // JSON highlighting.
    prettyPrint();
  
    // Bootstrap tooltips.
    $('.js-tooltip').tooltip({
      delay: 1000,
      container: 'body'
    });
  
    // Deal with rounded tab styling after tab clicks.
    $('a[data-toggle="tab"]:first').on('shown', function(e) {
      $(e.target).parents('.tabbable').addClass('first-tab-active');
    });
  
    $('a[data-toggle="tab"]:not(:first)').on('shown', function(e) {
      $(e.target).parents('.tabbable').removeClass('first-tab-active');
    });
  
    $('a[data-toggle="tab"]').click(function() {
      document.cookie = "tabstyle=" + this.name + "; path=/";
    });
  
    // Store tab preference in cookies & display appropriate tab on load.
    var selectedTab = null;
    var selectedTabName = getCookie('tabstyle');
  
    if (selectedTabName) {
      selectedTabName = selectedTabName.replace(/[^a-z-]/g, '');
    }
  
    if (selectedTabName) {
      selectedTab = $('.form-switcher a[name=' + selectedTabName + ']');
    }
  
    if (selectedTab && selectedTab.length > 0) {
      // Display whichever tab is selected.
      selectedTab.tab('show');
    } else {
      // If no tab selected, display rightmost tab.
      $('.form-switcher a:first').tab('show');
    }
  
    $(window).on('load', function() {
      $('#errorModal').modal('show');
    });
  });